<?php
// 加载容器类
require_once 'container.php';

// 定义接口
interface UserRepositoryInterface {
    public function findById($id);
}

// 实现接口
class UserRepository implements UserRepositoryInterface {
    public function findById($id) {
        return "用户ID: {$id}";
    }
}

// 依赖于接口的服务
class UserService {
    protected $userRepository;
    
    // 通过构造函数注入依赖
    public function __construct(UserRepositoryInterface $userRepository) {
        $this->userRepository = $userRepository;
    }
    
    public function getUser($id) {
        return $this->userRepository->findById($id);
    }
}

// 创建容器
$container = new Container();

// 绑定接口到实现
$container->bind('UserRepositoryInterface', 'UserRepository');

// 解析服务（自动注入依赖）
$userService = $container->make('UserService');

// 使用服务
echo $userService->getUser(1) . "\n";

// 绑定单例
$container->singleton('Logger', function() {
    return new class {
        public function log($message) {
            echo "[LOG] {$message}\n";
        }
    };
});

// 获取单例实例
$logger1 = $container->make('Logger');
$logger2 = $container->make('Logger');

// 验证是否是同一个实例
$logger1->log("这是第一个日志实例");
$logger2->log("这是第二个日志实例");

echo "logger1和logger2是否是同一个实例：" . (($logger1 === $logger2) ? "是" : "否") . "\n";
?>